////////////////////////////////////////////////
// DESCRIPTION:
//    Micro Framework Emulator Button
//
// Legal Notices:
//   Copyright (c) 2008, Telliam Consulting, LLC.
//   All rights reserved.
//
//   Redistribution and use in source and binary forms, with or without modification,
//   are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice, this list
//     of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice, this
//     list of conditions and the following disclaimer in the documentation and/or other
//     materials provided with the distribution.
//   * Neither the name of Telliam Consulting nor the names of its contributors may be
//     used to endorse or promote products derived from this software without specific
//     prior written permission.
//
//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
//   EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
//   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
//   SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
//   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
//   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
//   BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
//   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
//   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
//   DAMAGE. 
//

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace FusionWare.SPOT.EmulatorComponents
{
    /// <summary>Container control for a set of GPIO Buttons</summary>
    public class GpioButtonGroup : ContainerControl
    {
        /// <summary>Default Constructor</summary>
        public GpioButtonGroup()
        {
            base.SetStyle(ControlStyles.Selectable, true);
        }

        private FusionWare.SPOT.EmulatorComponents.GpioButton GetButtonForInputKey(Keys keyData)
        {
            for(int i = 0; i < base.Controls.Count; i++)
            {
                GpioButton button1 = base.Controls[i] as GpioButton;
                if( (button1 != null) && (button1.InputKey == keyData) )
                    return button1;
            }

            return null;
        }

        /// <summary>Checks if the key data is handled by this control</summary>
        /// <param name="keyData">Key info for the query</param>
        /// <returns>true if handled; false if not</returns>
        /// <remarks>
        /// Checks each containd button to see if it handles the key.
        /// </remarks>
        protected override bool IsInputKey(Keys keyData)
        {
            return (this.GetButtonForInputKey(keyData) != null);
        }

        /// <summary>Handles Painting for design mode</summary>
        /// <param name="e">Standard Paint Args</param>
        protected override void OnPaint(PaintEventArgs e)
        {
            if(base.DesignMode)
                this.OnPaintDesignMode(e);
        }

        private void OnPaintDesignMode(PaintEventArgs e)
        {
            Color penColor;
            Rectangle rectangle1 = base.ClientRectangle;
            if (this.BackColor.GetBrightness() < 0.5)
                penColor = ControlPaint.Light(this.BackColor);
            else
                penColor = ControlPaint.Dark(this.BackColor);

            using (Pen pen = new Pen(penColor))
            {
                pen.DashStyle = DashStyle.Dash;
                rectangle1.Width--;
                rectangle1.Height--;
                e.Graphics.DrawRectangle(pen, rectangle1);
            }
        }
    }
}

